
package com.springboot.rmq.producer.manager;

import java.util.Properties;

import com.springboot.rmq.comm.Constant;
import com.springboot.rmq.producer.MsgProducer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;



public class MsgProducerManager {

    /** 日志 */
    private static Log logger = LogFactory.getLog(MsgProducerManager.class);

    /**
     * 私有化构造函数
     */
    public MsgProducerManager() {

    }

    /**
     * producer properties 配置文件
     */
    private Properties producerProp;

    /**
     * 创建producer对象,该方法使用的是默认配置
     *
     * @return producer 消息生产者
     */
    public MsgProducer createProducer() {

        return new MsgProducer(producerProp);

    }


    /**
     * 创建producer方法
     *
     * @param topQueueNum 可以自定义topicqueue大小
     *
     * @return producer 消息生产者
     */
    public MsgProducer createProducer(int topQueueNum) {
        producerProp.setProperty(Constant.KEY_PRODUCER_TOPICQUEUENUMS, String.valueOf(topQueueNum));
        //判断是否使用了个性设置，如果没有，则使用默认配置
        return new MsgProducer(producerProp);
    }


    /**
     * 创建producer方法
     *
     * @param groupName 组名称
     *
     * @return producer 消息生产者
     * @since 2017-07-06 by shen.zhibing
     */
    public MsgProducer createProducer(String groupName) {
        producerProp.setProperty(Constant.KEY_PRODUCER_GROUPNAME, groupName);
        return new MsgProducer(producerProp);
    }

    /**
     * 创建producer方法
     *
     * @param topQueueNum  可以自定义topicqueue大小
     * @param instanceName 实例名称
     *
     * @return producer 消息生产者
     */
    public MsgProducer createProducer(int topQueueNum, String instanceName) {
        producerProp.setProperty(Constant.KEY_PRODUCER_TOPICQUEUENUMS, String.valueOf(topQueueNum));
        producerProp.setProperty(Constant.KEY_PRODUCER_INSTANCENAME, instanceName);
        //判断是否使用了个性设置，如果没有，则使用默认配置
        return new MsgProducer(producerProp);
    }

    /**
     * 创建producer方法
     *
     * @param topQueueNum 可以自定义topicqueue大小
     * @param timeOutMils 自定义超时时间（单位：毫秒）
     *
     * @return producer 消息生产者
     */
    public MsgProducer createProducer(int topQueueNum, int timeOutMils) {
        producerProp.setProperty(Constant.KEY_PRODUCER_TOPICQUEUENUMS, String.valueOf(topQueueNum));
        producerProp.setProperty(Constant.KEY_PRODUCER_TIMEOUT, String.valueOf(timeOutMils));
        return new MsgProducer(producerProp);
    }

    /**
     * 创建producer方法
     *
     * @param topQueueNum  可以自定义topicqueue大小
     * @param timeOutMils  自定义超时时间（单位：毫秒）
     * @param instanceName 实例名称
     *
     * @return producer 消息生产者
     */
    public MsgProducer createProducer(int topQueueNum, int timeOutMils, String instanceName) {
        producerProp.setProperty(Constant.KEY_PRODUCER_TOPICQUEUENUMS, String.valueOf(topQueueNum));
        producerProp.setProperty(Constant.KEY_PRODUCER_TIMEOUT, String.valueOf(timeOutMils));
        producerProp.setProperty(Constant.KEY_PRODUCER_INSTANCENAME, instanceName);
        logger.info("MsgProducer properties:" + producerProp.toString());
        return new MsgProducer(producerProp);
    }

    /*public Properties getProducerProp() {
        return producerProp;
    }*/

    public void setProducerProp(Properties producerProp) {
        this.producerProp = producerProp;
    }
}
